// Copyright 2013-2020 Dirk Lemstra <https://github.com/dlemstra/Magick.NET/>
//
// Licensed under the ImageMagick License (the "License"); you may not use this file except in
// compliance with the License. You may obtain a copy of the License at
//
//   https://www.imagemagick.org/script/license.php
//
// Unless required by applicable law or agreed to in writing, software distributed under the
// License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
// either express or implied. See the License for the specific language governing permissions
// and limitations under the License.
// <auto-generated/>

using System.Collections.Generic;

namespace ImageMagick
{
    [System.CodeDom.Compiler.GeneratedCode("Magick.NET.FileGenerator", "")]
    public partial interface IPaths<TQuantumType>
    {
        /// <summary>
        /// Applies the PathArcAbs operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="coordinates">The coordinates to use.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> ArcAbs(params PathArc[] coordinates);

        /// <summary>
        /// Applies the PathArcAbs operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="coordinates">The coordinates to use.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> ArcAbs(IEnumerable<PathArc> coordinates);

        /// <summary>
        /// Applies the PathArcRel operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="coordinates">The coordinates to use.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> ArcRel(params PathArc[] coordinates);

        /// <summary>
        /// Applies the PathArcRel operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="coordinates">The coordinates to use.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> ArcRel(IEnumerable<PathArc> coordinates);

        /// <summary>
        /// Applies the PathClose operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> Close();

        /// <summary>
        /// Applies the PathCurveToAbs operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="controlPointStart">Coordinate of control point for curve beginning.</param>
        /// <param name="controlPointEnd">Coordinate of control point for curve ending.</param>
        /// <param name="end">Coordinate of the end of the curve.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> CurveToAbs(PointD controlPointStart, PointD controlPointEnd, PointD end);

        /// <summary>
        /// Applies the PathCurveToAbs operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="x1">X coordinate of control point for curve beginning.</param>
        /// <param name="y1">Y coordinate of control point for curve beginning.</param>
        /// <param name="x2">X coordinate of control point for curve ending.</param>
        /// <param name="y2">Y coordinate of control point for curve ending.</param>
        /// <param name="x">X coordinate of the end of the curve.</param>
        /// <param name="y">Y coordinate of the end of the curve.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> CurveToAbs(double x1, double y1, double x2, double y2, double x, double y);

        /// <summary>
        /// Applies the PathCurveToRel operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="controlPointStart">Coordinate of control point for curve beginning.</param>
        /// <param name="controlPointEnd">Coordinate of control point for curve ending.</param>
        /// <param name="end">Coordinate of the end of the curve.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> CurveToRel(PointD controlPointStart, PointD controlPointEnd, PointD end);

        /// <summary>
        /// Applies the PathCurveToRel operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="x1">X coordinate of control point for curve beginning.</param>
        /// <param name="y1">Y coordinate of control point for curve beginning.</param>
        /// <param name="x2">X coordinate of control point for curve ending.</param>
        /// <param name="y2">Y coordinate of control point for curve ending.</param>
        /// <param name="x">X coordinate of the end of the curve.</param>
        /// <param name="y">Y coordinate of the end of the curve.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> CurveToRel(double x1, double y1, double x2, double y2, double x, double y);

        /// <summary>
        /// Applies the PathLineToAbs operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="coordinates">The coordinates to use.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> LineToAbs(params PointD[] coordinates);

        /// <summary>
        /// Applies the PathLineToAbs operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="coordinates">The coordinates to use.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> LineToAbs(IEnumerable<PointD> coordinates);

        /// <summary>
        /// Applies the PathLineToAbs operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="x">The X coordinate.</param>
        /// <param name="y">The Y coordinate.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> LineToAbs(double x, double y);

        /// <summary>
        /// Applies the PathLineToHorizontalAbs operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="x">The X coordinate.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> LineToHorizontalAbs(double x);

        /// <summary>
        /// Applies the PathLineToHorizontalRel operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="x">The X coordinate.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> LineToHorizontalRel(double x);

        /// <summary>
        /// Applies the PathLineToRel operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="coordinates">The coordinates to use.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> LineToRel(params PointD[] coordinates);

        /// <summary>
        /// Applies the PathLineToRel operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="coordinates">The coordinates to use.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> LineToRel(IEnumerable<PointD> coordinates);

        /// <summary>
        /// Applies the PathLineToRel operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="x">The X coordinate.</param>
        /// <param name="y">The Y coordinate.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> LineToRel(double x, double y);

        /// <summary>
        /// Applies the PathLineToVerticalAbs operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="y">The Y coordinate.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> LineToVerticalAbs(double y);

        /// <summary>
        /// Applies the PathLineToVerticalRel operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="y">The Y coordinate.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> LineToVerticalRel(double y);

        /// <summary>
        /// Applies the PathMoveToAbs operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="coordinate">The coordinate to use.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> MoveToAbs(PointD coordinate);

        /// <summary>
        /// Applies the PathMoveToAbs operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="x">The X coordinate.</param>
        /// <param name="y">The Y coordinate.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> MoveToAbs(double x, double y);

        /// <summary>
        /// Applies the PathMoveToRel operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="coordinate">The coordinate to use.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> MoveToRel(PointD coordinate);

        /// <summary>
        /// Applies the PathMoveToRel operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="x">The X coordinate.</param>
        /// <param name="y">The Y coordinate.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> MoveToRel(double x, double y);

        /// <summary>
        /// Applies the PathQuadraticCurveToAbs operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="controlPoint">Coordinate of control point.</param>
        /// <param name="end">Coordinate of final point.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> QuadraticCurveToAbs(PointD controlPoint, PointD end);

        /// <summary>
        /// Applies the PathQuadraticCurveToAbs operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="x1">X coordinate of control point.</param>
        /// <param name="y1">Y coordinate of control point.</param>
        /// <param name="x">X coordinate of final point.</param>
        /// <param name="y">Y coordinate of final point.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> QuadraticCurveToAbs(double x1, double y1, double x, double y);

        /// <summary>
        /// Applies the PathQuadraticCurveToRel operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="controlPoint">Coordinate of control point.</param>
        /// <param name="end">Coordinate of final point.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> QuadraticCurveToRel(PointD controlPoint, PointD end);

        /// <summary>
        /// Applies the PathQuadraticCurveToRel operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="x1">X coordinate of control point.</param>
        /// <param name="y1">Y coordinate of control point.</param>
        /// <param name="x">X coordinate of final point.</param>
        /// <param name="y">Y coordinate of final point.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> QuadraticCurveToRel(double x1, double y1, double x, double y);

        /// <summary>
        /// Applies the PathSmoothCurveToAbs operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="controlPoint">Coordinate of second point.</param>
        /// <param name="end">Coordinate of final point.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> SmoothCurveToAbs(PointD controlPoint, PointD end);

        /// <summary>
        /// Applies the PathSmoothCurveToAbs operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="x2">X coordinate of second point.</param>
        /// <param name="y2">Y coordinate of second point.</param>
        /// <param name="x">X coordinate of final point.</param>
        /// <param name="y">Y coordinate of final point.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> SmoothCurveToAbs(double x2, double y2, double x, double y);

        /// <summary>
        /// Applies the PathSmoothCurveToRel operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="controlPoint">Coordinate of second point.</param>
        /// <param name="end">Coordinate of final point.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> SmoothCurveToRel(PointD controlPoint, PointD end);

        /// <summary>
        /// Applies the PathSmoothCurveToRel operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="x2">X coordinate of second point.</param>
        /// <param name="y2">Y coordinate of second point.</param>
        /// <param name="x">X coordinate of final point.</param>
        /// <param name="y">Y coordinate of final point.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> SmoothCurveToRel(double x2, double y2, double x, double y);

        /// <summary>
        /// Applies the PathSmoothQuadraticCurveToAbs operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="end">Coordinate of final point.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> SmoothQuadraticCurveToAbs(PointD end);

        /// <summary>
        /// Applies the PathSmoothQuadraticCurveToAbs operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="x">X coordinate of final point.</param>
        /// <param name="y">Y coordinate of final point.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> SmoothQuadraticCurveToAbs(double x, double y);

        /// <summary>
        /// Applies the PathSmoothQuadraticCurveToRel operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="end">Coordinate of final point.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> SmoothQuadraticCurveToRel(PointD end);

        /// <summary>
        /// Applies the PathSmoothQuadraticCurveToRel operation to the <see cref="IPaths{TQuantumType}" />.
        /// </summary>
        /// <param name="x">X coordinate of final point.</param>
        /// <param name="y">Y coordinate of final point.</param>
        /// <returns>The <see cref="IPaths{TQuantumType}" /> instance.</returns>
        IPaths<TQuantumType> SmoothQuadraticCurveToRel(double x, double y);

    }
}
